import datetime
import os
import pytest
import importlib
from core.logger.logger import logger
from config import Logs_Dir, Env
from core.processor.dynamic_variable import Dynamic
from random import randint


@pytest.fixture(autouse=True, scope="session")
def logger_register():
    """日志统一注册函数"""
    logger.register("TestRunner", os.path.join(Logs_Dir,
                                               f"apiTestLog_{datetime.datetime.now().strftime('%Y-%m-%d')}.log"))
    logger.register("ProcessorLogs", os.path.join(Logs_Dir,
                                                  f"ProcessorLogs_{datetime.datetime.now().strftime('%Y-%m-%d')}.log"))


class GlobalVariable:
    def randint(self, start: int, end: int):
        return randint(start, end)


global_variable = GlobalVariable()


@pytest.fixture(autouse=True, scope="session")
def global_variable_class():
    """全局变量类"""
    return global_variable


@pytest.fixture
def dynamic_variable_processor():
    """
    动态变量处理。
    dynamic_variable有两个参数，分别是obj和storage。
    obj参数是待处理的对象，例如url、headers、body这类可能
    会有动态变量的地方都属于待处理对象。

    storage则是存储动态变量，像上面的GlobalVariable类就是
    其中之一，这里要传一个list进来，哪怕只有一个。
    """
    return Dynamic.replace_variable


def pytest_addoption(parser):
    parser.addoption("--env", action="store", default=None, required=True, help="输入环境配置文件(.py)")


@pytest.fixture(scope="session")
def env(request):
    e = Env()
    env_file = request.config.getoption("--env")
    attributes = importlib.import_module(os.path.basename(env_file).removesuffix(".py"), package=env_file).__dict__
    for key, value in attributes.items():
        if not key.startswith("__"):
            setattr(e, key, value)
    return e

